package com.czk.netty.netty.websocket.server;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;

import java.time.LocalDateTime;

/**
 * TextWebSocketFrame表示一个文本帧
 *
 * @Author:ChenZhangKun
 * @Date: 2021/1/19 20:33
 */
public class MyWebSocketFrameHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {
    @Override
    protected void channelRead0(ChannelHandlerContext channelHandlerContext, TextWebSocketFrame textWebSocketFrame) throws Exception {
        // 输出消息
        System.out.println("服务端收到消息 " + textWebSocketFrame.text());
        // 回复浏览器
        channelHandlerContext.channel().writeAndFlush(new TextWebSocketFrame("服务器时间" + LocalDateTime.now()) + textWebSocketFrame.text());
    }

    /**
     * web客户端连接后触发此方法
     *
     * @param ctx
     * @throws Exception
     */
    @Override
    public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
        // id表示唯一的一个值,LongText是惟一的 shortText不是惟一的
        System.out.println("handler被调用了" + ctx.channel().id().asLongText());
        System.out.println("handler被调用了" + ctx.channel().id().asShortText());
    }

    /**
     * 连接断开时候调用
     *
     * @param ctx
     * @throws Exception
     */
    @Override
    public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
        System.out.println("handlerRemoved 被调用" + ctx.channel().id().asLongText());
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        System.out.println("发生了异常，关闭连接");
        ctx.close();
    }
}
